/**
 * 
 */
package estructuras;

import java.util.List;

/*
 * @author byron
 *
 */
public interface ArbolInterfaz<Generico extends Comparable<Generico>> {
	
	/**
	 * Busca un elemento el arbol y devuelve el arbol en que se encuentra.
	 * 		
	 * @param objeto El objeto que se esta buscando en el arbol.
	 * 
	 * @return Arbol en el que se encuentra.
	 */
	public ArbolInterfaz<Generico> find(Generico objeto);
	
	/**
	 * Agrera un elemento al arbol.
	 * 
	 * @param object El elemento que se va a agregar.
	 */
	public void add(Generico object);
	
	/**
	 * Quita un elemento del arbol.
	 * 
	 * @param object El elemento que se desea quitar del arbol.
	 */
	public void remove(Generico object);
	
	/**
	 * Muestra los elementos del arbol en orden ascendente.
	 * 
	 * @return
	 */
	public String show();
	
	/**
	 * Determina si el arbol permite repetidos o no.
	 * 
	 * @return Devuelve estado de si este arbol permite repetidos.
	 */
	public boolean allowRepetitions();
	
	/**
	 * Cambia el estado actual de si este árbol recibe o no datos repetidos. 
	 */
	public void setAllowRepetitions(boolean permitir);
	
	/**
	 * Busca un elemento el arbol y devuelve el nodo en el que se encuentra.
	 * 		
	 * @param objeto El objeto que se esta buscando en el arbol.
	 * 
	 * @return Nodo del arbol donde fue encontrado.
	 */
	public List<Generico> search(Generico objeto);
}
